package enumAndAnnotation;

/**
 * 枚举
 */
public class Enumeration01 {

    public static void main(String[] args) {
        /*
            需求：创建季节对象
            分析：季节的值是有限的几个值，只读，不需要修改
            实现：通过使用枚举
            1)枚举是一组常量的集合
            2)两种实现方式：
                自定义类实现枚举
                使用enum关键字实现枚举

            不需要提供setXxx方法，因为枚举对象值通常为只读
            对枚举对象/属性使用 final + static 共同修饰，实现底层优化
            枚举对象名通常使用全部大写，常量的命名规范
            枚举对象根据需要，也可以有多个属性
         */
    }
}

class Season {  //类

    private String name;

    private String desc;//描述

    //定义了四个对象 固定
    public static final Season SPRING = new Season("春天", "温暖");
    public static final Season WINTER = new Season("冬天", "寒冷");
    public static final Season AUTUMN = new Season("冬天", "凉爽");
    public static final Season SUMMER = new Season("冬天", "炎热");

    //将构造器私有化，防止直接 new
    //去掉 setXxx 方法，防止属性被修改
    //在Season内部，直接创建固定的对象
    //可以加入final修饰符

    private Season(String name, String desc) {
        this.name = name;
        this.desc = desc;
    }

    public String getName() {
        return name;
    }

    public String getDesc() {
        return desc;
    }

    @Override
    public String toString() {
        return "Season{" +
                "name='" + name + '\'' +
                ", desc='" + desc + '\'' +
                '}';
    }
}
